<template>
  <div class="task-view">
    <el-button type="primary" @click="sendToModuleData">发送数据</el-button>
    <TaskForm ref="moudleRef" />
  </div>
</template>

<script setup lang="ts">
defineOptions({
  name: "TaskView",
  components: {}
});


import { onMounted, provide, ref } from 'vue';
// import createTaskModule from "mctp-modules-task/src/index";
// import TaskForm from "mctp-modules-task/src/components/index.vue";
// import type { ModuleInterface, SendCmd } from "mctp-modules-task/src/types";
import "@/dist/assets/style.css";
import createTaskModule, { TaskForm } from "@/modules/mctp-modules-task/mctp-modules-task.js";
import type { ModuleInterface, SendCmd } from "@/modules/mctp-modules-task/types.d";

import { handlePluginCommand } from '@/utils/commandHandler';
import type { AxiosRequestConfig } from 'axios';
import type { Response } from '@/mctp-api';

const moudleRef = ref(null);

const index = ref(0);

const loadModule = () => {
  // 1. EventData 初始值：空对象（业务数据由后端返回，初始无需填充）
  const initialCalibData = {};

  // 2. 平台命令处理：完全转发插件传递的所有参数，对齐 createPost 逻辑
  const handleModuleCmd: SendCmd<{
    moduleId: string;
    fixedParams?: any;
    data?: Record<string, any>;
    params?: any;
    config?: AxiosRequestConfig;
  }, Response<any>> = async (moduleName, cmd, payload) => {
    if (moduleName !== "TaskForm") return { code: 400, msg: "模块不匹配", data: null };

    console.log("平台接收校准指令：", cmd, payload);
    // 直接调用平台的 handlePluginCommand，传递所有参数（复刻 createPost 逻辑）
    return handlePluginCommand(
      payload?.moduleId || moduleName, // 模块ID（替代 createPost 的 url）
      payload?.fixedParams, // 固定参数（对齐 createPost 的 fixedParams）
      payload?.data, // 业务数据（对齐 createPost 的 data）
      payload?.params, // URL 参数（对齐 createPost 的 params）
      payload?.config // Axios 配置（对齐 createPost 的 config）
    );
  };

  // 3. 创建插件实例：完全对齐原有调用方式
  const taskModule: ModuleInterface<typeof initialCalibData> = createTaskModule(
    handleModuleCmd,
    initialCalibData
  );

  const SEND_TASK_CMD_KEY = "send-task-cmd"; // 协商好的字符串Key
  const GET_TASK_DATA_KEY = "get-task-data"; // 配套的“获取数据”Key

  provide(SEND_TASK_CMD_KEY, (cmd: string, payload?: any) => {
    return taskModule.sendCommand(cmd, payload);
  });
  // 注入“获取数据”方法（供插件调用）
  console.log("平台确认是否为响应式对象", (taskModule.eventData as any).value);
  provide(GET_TASK_DATA_KEY, () => taskModule.eventData);

  // 5. 手动初始化插件
  taskModule.startup();

}

onMounted(() => {
  loadModule();
  (moudleRef.value as any).dataEvent(index.value);
})


const sendToModuleData = () => {
  setInterval(() => {
    index.value++;
    (moudleRef.value as any).dataEvent(index.value);
  }, 100);

}

</script>

<style lang="scss" scoped>
.task-view {
  padding: 12px;
  height: 100%;
  overflow: scroll;
}
</style>
